home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MonitorDoubler / Source / MultiMonitorController.cp < prev    next >
Encoding:
Text File  |  2000-06-23  |  2.9 KB  |  113 lines

  1. #include "MultiMonitorController.h"
  2.  
  3. #include <LowMem.h>
  4. #include <string.h>
  5.  
  6. MultiMonitorController *        MultiMonitorController::sMMController = NULL;
  7. TMTask                            MultiMonitorController::sTimerTask;
  8. TimerUPP                        MultiMonitorController::sTimerRoutineDescriptor = NewTimerProc(MultiMonitorController::CursorTimer);
  9.  
  10. // Do it 60fps
  11. const UInt32                    kScreenMillisecondUpdate = 1000 / 30;
  12.  
  13. // ---------------------------------------------------------------------------
  14. //    • MultiMonitorController
  15. // ---------------------------------------------------------------------------
  16.  
  17. MultiMonitorController::MultiMonitorController()
  18. {
  19.     sMMController = this;
  20.     mCapturedDevice = NULL;
  21.     
  22.     memset(&mVirtualDevice, 0, sizeof(mVirtualDevice));
  23.  
  24.     mCapturedDevice = NEW CapturedGDevice();
  25.     mVirtualDevice = NEW VirtualGDevice();
  26. }
  27.         
  28.  
  29. // ---------------------------------------------------------------------------
  30. //    • ~MultiMonitorController
  31. // ---------------------------------------------------------------------------
  32.  
  33. MultiMonitorController::~MultiMonitorController()
  34. {
  35.     sMMController = NULL;
  36.  
  37.     if (mCapturedDevice != NULL)
  38.     {    
  39.         mCapturedDevice->UncaptureDevice();
  40.         delete mCapturedDevice;
  41.         mCapturedDevice = NULL;
  42.     }
  43.  
  44.     delete mVirtualDevice;
  45.     mVirtualDevice = NULL;
  46. }
  47.  
  48.  
  49. // ---------------------------------------------------------------------------
  50. //    • Enable
  51. // ---------------------------------------------------------------------------
  52.  
  53. void
  54. MultiMonitorController::Enable()
  55. {
  56.     mCapturedDevice->CaptureDevice(::GetMainDevice(), mVirtualDevice);
  57.  
  58.     memset(&sTimerTask, 0, sizeof(sTimerTask));    
  59.     sTimerTask.tmAddr = MultiMonitorController::sTimerRoutineDescriptor;
  60.  
  61.     mCurrentEffect = NEW LargeBlendEffect();
  62.     mCapturedDevice->SetGraphicBlendEffect(mCurrentEffect);
  63.  
  64.     ::InsTime((QElemPtr)&sTimerTask);
  65.     ::PrimeTime((QElemPtr)&sTimerTask, kScreenMillisecondUpdate);
  66. }
  67.  
  68.  
  69. // ---------------------------------------------------------------------------
  70. //    • Disable
  71. // ---------------------------------------------------------------------------
  72.  
  73. void
  74. MultiMonitorController::Disable()
  75. {
  76.     ::RmvTime((QElemPtr)&sTimerTask);
  77.  
  78.     mCapturedDevice->UncaptureDevice();
  79. }
  80.  
  81.  
  82. // ---------------------------------------------------------------------------
  83. //    • CursorTimer
  84. // ---------------------------------------------------------------------------
  85.  
  86. void
  87. MultiMonitorController::CursorTimer(
  88.     TMTaskPtr                 inTimerTaskPtr)
  89. {
  90.     // Call through to jCrsrTask to keep the mouse alive
  91.     if (!LMGetCrsrBusy())
  92.         CallUniversalProc(*(UniversalProcPtr *)0x08EE, 0);
  93.  
  94.     // Just update the captured screen
  95.     MultiMonitorController::GetInstance().mCapturedDevice->UpdateCapturedScreen();
  96.  
  97.     ::PrimeTime((QElemPtr)inTimerTaskPtr, kScreenMillisecondUpdate);
  98. }
  99.  
  100.  
  101. // ---------------------------------------------------------------------------
  102. //    • EnableMagnify
  103. // ---------------------------------------------------------------------------
  104.  
  105. void
  106. MultiMonitorController::EnableMagnify(
  107.     Boolean                    inEnable)
  108. {
  109.     mCurrentEffect->EnableMagnify(inEnable);
  110. }
  111.  
  112.  
  113.